package com.payment.common.core.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.SqlSessionTemplate;

/**
 * 类名：BaseDao.java<br>
 * 描述：<br>
 * 创建者：XINJF<br>
 * 创建日期：2018年5月8日下午8:47:25<br>
 * 版本：1.0<br>
 * 修改者：<br>
 * 修改日期：<br>
 */
public interface BaseDao<T> {
	
	/**
	 * 功能描述: 保存数据<br>
	 * 创建者：XINJF<br>
	 * 创建日期:2018年5月8日下午8:48:34<br>
	 * 版本：1.0<br>
	 * 修改者：<br>
	 * 修改日期：<br>
	 * @param entity
	 * @return
	 */
	long insert(T entity);
	
	/**
	 * 功能描述:批量保存数据<br>
	 * 创建者：XINJF<br>
	 * 创建日期:2018年5月8日下午8:49:58<br>
	 * 版本：1.0<br>
	 * 修改者：<br>
	 * 修改日期：<br>
	 * @param list
	 * @return
	 */
	long insert(List<T> list);
	
	/**
	 * 功能描述: 更新实体<br>
	 * 创建者：XINJF<br>
	 * 创建日期:2018年5月8日下午8:50:26<br>
	 * 版本：1.0<br>
	 * 修改者：<br>
	 * 修改日期：<br>
	 * @param entity
	 * @return
	 */
	long update(T entity);
	
	/**
	 * 功能描述:批量更新<br>
	 * 创建者：XINJF<br>
	 * 创建日期:2018年5月8日下午8:50:56<br>
	 * 版本：1.0<br>
	 * 修改者：<br>
	 * 修改日期：<br>
	 * @param list
	 * @return
	 */
	long update(List<T> list);
	
	/**
	 * 功能描述: 根据ID查找记录<br>
	 * 创建者：XINJF<br>
	 * 创建日期:2018年5月8日下午8:51:33<br>
	 * 版本：1.0<br>
	 * 修改者：<br>
	 * 修改日期：<br>
	 * @param id
	 * @return
	 */
	T getById(long id);
	
	/**
	 * 功能描述:删除记录<br>
	 * 创建者：XINJF<br>
	 * 创建日期:2018年5月8日下午8:51:59<br>
	 * 版本：1.0<br>
	 * 修改者：<br>
	 * 修改日期：<br>
	 * @param id
	 * @return
	 */
	long deleteById(long id);
	
	/**
	 * 功能描述: 根据参数查询数据<br>
	 * 创建者：XINJF<br>
	 * 创建日期:2018年5月8日下午8:52:45<br>
	 * 版本：1.0<br>
	 * 修改者：<br>
	 * 修改日期：<br>
	 * @param paramMap
	 * @return
	 */
	List<T> listBy(Map<String, Object> paramMap);
	
	List<Object> listBy(Map<String, Object> paramMap, String sqlId);
	
	/**
	 * 功能描述: 根据条件查询<br>
	 * 创建者：XINJF<br>
	 * 创建日期:2018年5月8日下午8:53:40<br>
	 * 版本：1.0<br>
	 * 修改者：<br>
	 * 修改日期：<br>
	 * @param paramMap
	 * @return
	 */
	T getBy(Map<String, Object> paramMap);
	
	Object getBy(Map<String, Object> paramMap, String sqlId);
	
	/**
	 * 功能描述: 根据序列名称获取下一个值<br>
	 * 创建者：XINJF<br>
	 * 创建日期:2018年5月8日下午8:55:29<br>
	 * 版本：1.0<br>
	 * 修改者：<br>
	 * 修改日期：<br>
	 * @param seqName
	 * @return
	 */
	String getSeqNextValue(String seqName);
	
	SqlSessionTemplate getSessionTemplate();
	
	SqlSession getSqlSession();

}
